/**
 * 作者：
 * 创建时间：2012-6-30 上午9:56:35
 */
package dragon.model.bizObject;

import dragon.core.util.StringUtils;
import dragon.model.base.ModelDescribe;
import dragon.model.table.Field;

/**
 * 业务字段
 */
public class BizField extends Field {

	/**
	 * 别名，对应数据模型的字段code<br>
	 * 业务字段中引用了多张物理表的字段时，如果部分物理表字段名相同，则用此字段标识物理表中的字段名<br>
	 * 一般情况下，该字段同code相同
	 */
	@ModelDescribe(annotation = "别名，对应数据模型的字段code<br>业务字段中引用了多张物理表的字段时，如果部分物理表字段名相同，则用此字段标识物理表中的字段名<br>一般情况下，该字段同code相同")
	private String alias;

	/**
	 * 宽度，整数值直接代表宽度大小，小数表示宽度占datagrid整体宽度的百分比
	 */
	@ModelDescribe(annotation = "宽度，整数值直接代表宽度大小，小数表示宽度占datagrid整体宽度的百分比")
	private String width = "100";

	/**
	 * 是否启用字段排序(否0，是1)
	 */
	@ModelDescribe(annotation = "是否启用字段排序(否0，是1)")
	private int sortable = 1;

	/**
	 * 是否冻结列(冻结的列显示在最左边，当列过多时，会自动出现横向滚动条，拖动滚动条时冻结的列不会移动)
	 */
	@ModelDescribe(annotation = "是否冻结列(冻结的列显示在最左边，当列过多时，会自动出现横向滚动条，拖动滚动条时冻结的列不会移动)")
	private int frozen = 0;

	/**
	 * 字段格式化函数<br>
	 * formatter : function(val, row) {};[val:当前列值;row:当前行对象]
	 */
	@ModelDescribe(annotation = "字段格式化函数<br>formatter : function(val, row) {};[val:当前列值;row:当前行对象]")
	private String formatter;

	/**
	 * 业务字段值
	 */
	@ModelDescribe(annotation = "业务字段值")
	private String value;

	/**
	 * 运行时字段，业务字段字面值(对于通过弹出窗口设置的字段，真实值往往都是隐藏的，显示的是字面值)
	 */
	@ModelDescribe(annotation = "运行时字段，业务字段字面值(对于通过弹出窗口设置的字段，真实值往往都是隐藏的，显示的是字面值)", runtime = true)
	private String text;

	/**
	 * 是否增加字段(否0，是1)<br>
	 * 如果字段被绑定到INSERT语句中，则此字段值自动被设定为1，增加字段在数据增加页面可编辑<br>
	 * 如果字段并没有绑定到INSERT语句中，但又希望可以被编辑，则可显示设定该值为1
	 */
	@ModelDescribe(annotation = "是否增加字段(否0，是1)<br>如果字段被绑定到INSERT语句中，则此字段值自动被设定为1，增加字段在数据增加页面可编辑<br>如果字段并没有绑定到INSERT语句中，但又希望可以被编辑，则可显示设定该值为1")
	private int canInsert = 0;

	/**
	 * 是否修改字段(否0，是1)<br>
	 * 如果字段被绑定到UPDATE语句中，则此字段值自动被设定为1，修改字段在数据修改页面可编辑<br>
	 * 如果字段并没有绑定到UPDATE语句中，但有希望可以被编辑，则可显示设定该值为1
	 */
	@ModelDescribe(annotation = "是否修改字段(否0，是1)<br>如果字段被绑定到UPDATE语句中，则此字段值自动被设定为1，修改字段在数据修改页面可编辑<br>如果字段并没有绑定到UPDATE语句中，但有希望可以被编辑，则可显示设定该值为1")
	private int canUpdate = 0;

	/**
	 * 是否表单字段，非表单字段只显示在列表中，不会显示在增加或修改的表单中
	 */
	@ModelDescribe(annotation = "是否表单字段，非表单字段只显示在列表中，不会显示在增加或修改的表单中")
	private int isFormField = 1;

	/**
	 * 是否列表字段，非列表字段只显示在增加或修改的表单中，不会显示在列表中
	 */
	@ModelDescribe(annotation = "是否列表字段，非列表字段只显示在增加或修改的表单中，不会显示在列表中")
	private int isListField = 1;

	/**
	 * 是否换行
	 */
	@ModelDescribe(annotation = "是否换行")
	private int br = 1;

	/**
	 * 运行时字段，邻近的(分布在同一行中)字段数量
	 */
	@ModelDescribe(annotation = "运行时字段，邻近的(分布在同一行中)字段数量", runtime = true)
	private int adjacentFieldsNum = 0;

	@Override
	public String toString() {
		StringBuilder str = new StringBuilder();
		str.append(super.toString());
		str.append("dragon.model.bizObject.BizField:").append("\n");
		str.append("alias=").append(alias).append("\t");
		str.append("width=").append(width).append("\t");
		str.append("sortable=").append(sortable).append("\t");
		str.append("frozen=").append(frozen).append("\t");
		str.append("formatter=").append(formatter).append("\t");
		str.append("value=").append(value).append("\t");
		str.append("text=").append(text).append("\t");
		str.append("canInsert=").append(canInsert).append("\t");
		str.append("canUpdate=").append(canUpdate).append("\t");
		str.append("isFormField=").append(isFormField).append("\t");
		str.append("isListField=").append(isListField).append("\t");
		str.append("br=").append(br).append("\t");
		str.append("adjacentFieldsNum=").append(adjacentFieldsNum).append("\t");
		str.append("\n");
		return str.toString();
	}

	@Override
	public String toHtmlString() {
		StringBuilder str = new StringBuilder();
		str.append(super.toHtmlString());
		str.append("dragon.model.bizObject.BizField:").append("<br/>");
		str.append("alias=").append(alias).append("&nbsp;&nbsp;");
		str.append("width=").append(width).append("&nbsp;&nbsp;");
		str.append("sortable=").append(sortable).append("&nbsp;&nbsp;");
		str.append("frozen=").append(frozen).append("&nbsp;&nbsp;");
		str.append("formatter=").append(formatter).append("&nbsp;&nbsp;");
		str.append("value=").append(value).append("&nbsp;&nbsp;");
		str.append("text=").append(text).append("&nbsp;&nbsp;");
		str.append("canInsert=").append(canInsert).append("&nbsp;&nbsp;");
		str.append("canUpdate=").append(canUpdate).append("&nbsp;&nbsp;");
		str.append("isFormField=").append(isFormField).append("&nbsp;&nbsp;");
		str.append("isListField=").append(isListField).append("&nbsp;&nbsp;");
		str.append("br=").append(br).append("&nbsp;&nbsp;");
		str.append("adjacentFieldsNum=").append(adjacentFieldsNum).append("&nbsp;&nbsp;");
		str.append("<br/>");
		return str.toString();
	}

	/**
	 * @return the width
	 */
	public String getWidth() {
		if (StringUtils.isInteger(width)) {
			// 指定数值
			return width;
		} else if (width.contains(".")) {
			// 指定百分比
			return "$(this).width() * " + width;
		} else {
			// 其它情况返回默认值
			return "100";
		}
	}

	/**
	 * @param width
	 *            the width to set
	 */
	public void setWidth(String width) {
		this.width = width;
	}

	/**
	 * @return the sortable
	 */
	public int getSortable() {
		return sortable;
	}

	/**
	 * @param sortable
	 *            the sortable to set
	 */
	public void setSortable(int sortable) {
		this.sortable = sortable;
	}

	/**
	 * @return the formatter
	 */
	public String getFormatter() {
		return formatter;
	}

	/**
	 * @param formatter
	 *            the formatter to set
	 */
	public void setFormatter(String formatter) {
		this.formatter = formatter;
	}

	/**
	 * @return the frozen
	 */
	public int getFrozen() {
		return frozen;
	}

	/**
	 * @param frozen
	 *            the frozen to set
	 */
	public void setFrozen(int frozen) {
		this.frozen = frozen;
	}

	/**
	 * @return the alias
	 */
	public String getAlias() {
		return alias;
	}

	/**
	 * @param alias
	 *            the alias to set
	 */
	public void setAlias(String alias) {
		this.alias = alias;
	}

	/**
	 * @return the value
	 */
	public String getValue() {
		return value;
	}

	/**
	 * @param value
	 *            the value to set
	 */
	public void setValue(String value) {
		this.value = value;
	}

	/**
	 * @return the canInsert
	 */
	public int getCanInsert() {
		return canInsert;
	}

	/**
	 * @param canInsert
	 *            the canInsert to set
	 */
	public void setCanInsert(int canInsert) {
		this.canInsert = canInsert;
	}

	/**
	 * @return the canUpdate
	 */
	public int getCanUpdate() {
		return canUpdate;
	}

	/**
	 * @param canUpdate
	 *            the canUpdate to set
	 */
	public void setCanUpdate(int canUpdate) {
		this.canUpdate = canUpdate;
	}

	/**
	 * @return the isFormField
	 */
	public int getIsFormField() {
		return isFormField;
	}

	/**
	 * @param isFormField
	 *            the isFormField to set
	 */
	public void setIsFormField(int isFormField) {
		this.isFormField = isFormField;
	}

	/**
	 * @return the br
	 */
	public int getBr() {
		return br;
	}

	/**
	 * @param br
	 *            the br to set
	 */
	public void setBr(int br) {
		this.br = br;
	}

	/**
	 * @return the adjacentFieldsNum
	 */
	public int getAdjacentFieldsNum() {
		return adjacentFieldsNum;
	}

	/**
	 * @param adjacentFieldsNum
	 *            the adjacentFieldsNum to set
	 */
	public void setAdjacentFieldsNum(int adjacentFieldsNum) {
		this.adjacentFieldsNum = adjacentFieldsNum;
	}

	/**
	 * @return the text
	 */
	public String getText() {
		return text;
	}

	/**
	 * @param text
	 *            the text to set
	 */
	public void setText(String text) {
		this.text = text;
	}

	/**
	 * @return the isListField
	 */
	public int getIsListField() {
		return isListField;
	}

	/**
	 * @param isListField
	 *            the isListField to set
	 */
	public void setIsListField(int isListField) {
		this.isListField = isListField;
	}

}
